package com.cskaoyan.javase.oop3._2inner._1member._0introduction;

/**
 * 成员内部类
 * 成员内部类是最普通的内部类
 *      它直接定义在另一个类的成员位置,可以看成该类的一个成员。
 *
 * 语法：
 * //外围类
 * [访问权限修饰符] class EnclosedClazz{
 * //成员内部类
 *   [访问权限修饰符] class InnerClazz{
 *  }
 * }
 *
 * 成员内部类的自身特点
 * 主要从以下几个角度分析：
 *      1.访问权限修饰符
 *          四种访问级别都有
 *          因为它不再是一个单独定义的类了,而定义在另一个的内部
 *          可以看成类的成员.
 *
 *      2.成员特点
 *          成员内部类没有静态声明,但可以定义普通成员
 *          成员内部类有构造器,实际上Java中所有类都有构造器
 *          代码块,有构造器就有构造代码块,没有静态代码块
 *
 *          特殊的:
 *              允许定义字面值常量赋值的全局常量
 *              也就是不会触发类初始化的全局常量
 *
 *      3.继承和实现
 *          成员内部类可以继承,可以实现
 *          包括继承外部类,内部类
 *
 *      思考题:
 *          一个普通的外部类,能不能继承某个类的成员内部类呢?
 *
 * @since 10:02
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
}

// 外围类
class EnclosedClazz {
    class A {
    }

    class B {
    }

    private abstract class BaseA {
    }

    private interface IA {
    }

    private interface IB {
    }

    // 成员内部类
    class Inner extends A implements IA, IB {
        // 到底能定义什么东西呢?
        int num;
        private int num2;
        static final int NUM3 = 100;
        static final String STRING = "abc";
        // static final String STRING2 = new String("abc");

        public void test() {
        }
        // Inner classes cannot have static declarations
        // static int num3;
        // public static void testStatic(){}
        // static {}

        public Inner() {
        }

        public Inner(int num, int num2) {
            this.num = num;
            this.num2 = num2;
        }
    }

}

// class A extends EnclosedClazz.Inner {
// }